package examples

import (
	"github.com/pkg/errors"
	"srhino.com/go-kit/pkg/log"
)

// 对于一个error级日志，期望看到由谁打印，通过内容可以知道错误产生源头和途径哪些函数/方法达到这里。
// 然而往往错误由谁打印比源头和途径更重要，对于研发人员而言，见到错误消息是能够判断根因出在哪儿，
// 因此不要求错误上报时必须包裹本方法或函数名称，但必要的错误消息是要包裹进去的。
//
// error信息一定是在错误不再上报，由此终结时才打印输出，一定要遵从“错误只处理一次”的原则。
//
// Error级日志打印规范
// 1. 生成的新错误使用小写开头；
// 2. 包裹的错误消息也用消息开头；

// mustGenerateError 只要调用都会返回一个错误
func mustGenerateError() error {
	return errors.New("must generate a new error")
}

// returnWrapError 只要有错就把自己包进去然后返回
func returnWrapError() error {
	err := mustGenerateError()
	if err != nil {
		return errors.Wrap(err, "warpped an error")
	}
	return nil
}

// testError 测试错误日志打印
func testError() {
	err := returnWrapError()
	if err != nil {
		log.GetSugaredLogger().Error(err)
	}
}
